package com.songlanyun.modules.goods.model.vo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.songlanyun.common.drive.ValueObject;
import com.songlanyun.common.enums.GoodsConstant;
import com.songlanyun.common.utils.SpringContextUtils;
import com.songlanyun.common.validator.group.AddGroup;
import com.songlanyun.common.validator.group.UpdateGroup;
import com.songlanyun.modules.goods.service.GoodsSkuService;
import com.songlanyun.modules.group.model.vo.GoodsGroupSlim;
import com.songlanyun.modules.group.service.ProductGoodsGroupService;
import lombok.Data;
import org.apache.poi.hpsf.Decimal;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
public class GoodsSlimVo implements ValueObject {

    private Long id;
    /**
     * 发布的商家店铺Id
     */
    private Long shopId;

    /**
     * 候鸟商品id
     */
    private String houniaoSpuId;

    /**
     * 贸易类型id，1=保税直供，2=完税进口，3=国内贸易，4=香港直邮，5=海外直邮
     */
    private Integer tradeTypeId;

    /**
     * 店名
     */
    private String shopName;

    /**
     * 最低售价
     */
    private BigDecimal minSalePrice;
    /**
     * 最高售价
     */
    private BigDecimal maxSalePrice;
    /**
     * 最低市场价
     */
    private BigDecimal minMarketPrice;
    /**
     * 最高市场价
     */
    private BigDecimal maxMarketPrice;
    /**
     * 最低兑换积分
     */
    private BigDecimal minExchangePoint;
    /**
     * 最高兑换积分
     */
    private BigDecimal maxExchangePoint;

    /**
     * 标题
     */
    private String title;

    /**
     * 是否是积分商品
     */
    private Boolean pointGoods;

    /**
     * 是否是免费商品
     */
    private Boolean free;

    /**
     * 是否是积分兑换（0，不是积分兑换就是要使用积分，1积分兑换）
     */
    private Boolean exchange;
    /**
     * 当前的审核状态
     */
    private GoodsConstant.VerifyStatus verifyStatus;

    /**
     * 发布时间
     */
    private Date createTime;

    /**
     * 是否是平台商品
     */
    private Boolean platformStore;

    /**
     * 真实销量
     */
    private Integer realSaleNum;

    /**
     * 初始化销量
     */
    private Integer initSaleNum;

    /**
     * 输出销量
     */
    private Integer resultSaleNum;

    /**
     * 限购数量(0：代表不限购，大于0，为限购)
     */
    private Integer limitBuyNum;

    /**
     * 短标题
     */
    private String shortTitle;
    /**
     * 封面图片
     */
    private String cover;

    /**
     * 上下架状态
     */
    private Boolean added;

    /**
     * 是否是代销
     */
    private Boolean proxy;

    /**
     * 经营商家id
     */
    private Long authorizeShopId;

    /**
     * 是否开启会员折扣
     */
    private Boolean openUserDiscount;

    /**
     * 热销
     */
    private Boolean hot;

    /**
     * 是否是新品
     */
    private Boolean newGoods;

    /**
     * 是否推荐
     */
    private Boolean recommend;

    /**
     * 如果用来给活动添加商品时用的是否参与了活动的标识
     */
    private Boolean isJoin = false;

    private Integer sort;

    /**
     * 平台商家指定商品是否可以代销
     */
    private Boolean ableProxySale;

    /**
     * 审核说明
     */
    private String verifyRemark;

    /**
     * 是否删除（0正常，-1删除）
     */
    private Integer deleted;

    /**
     * 评论数
     */
    private Integer commentNum;

    /**
     * 评分
     */
    private BigDecimal average;

    /**
     * 商品分区特征(0普通商品,1激活区商品)
     */
    private GoodsConstant.AreaFeature areaFeature;



    /**
     * 礼包类型
     */
    private GoodsConstant.GiftType giftType;

    private List<GoodsGroupSlim> groupSlimList;

    public List<GoodsGroupSlim> loadGroupSlimList(Long shopId) {

        if (groupSlimList == null) {
            ProductGoodsGroupService service = ((ProductGoodsGroupService) SpringContextUtils.getBean("productGoodsGroupService"));
            groupSlimList = service.selectGoodsGroupRelationByGoodsIdAndShopId(shopId, this.getId());
        }
        return groupSlimList;
    }

    /**
     * 商品收藏总数
     */
    private Integer collectSum;

    /**
     * 第三方商品的SpuId;
     */
    private Long thirdSpuId;

    /**
     *  是否是第三方商品
     */
    private Boolean third;

    /**
     * 如果是第三方商品，来源有效
     * 来源1云仓2京东6阿里巴巴7天猫11华南一仓14华东一仓15淘宝
     */
    private Integer source;


    /**
     * 赠送贡献值
     */
    private BigDecimal consumptionValue;

    /**
     * 总库存
     */
    @TableField(exist = false)
    private Integer residualInventory;

    /**
     * 计算库存
     *
     * @return
     */
    public List<SkuComItemVo> loadResidualInventory() {

        GoodsSkuService goodsSkuService = (GoodsSkuService) SpringContextUtils.getBean("goodsSkuService");
        List<SkuComItemVo> list = goodsSkuService.loadSkuItemList(getId());
        Map<Long, Integer> temp = new HashMap<>();
        Integer total = 0;
        list.forEach(o -> {
            if (!temp.containsKey(o.getSingleGoodsId())) {
                temp.put(o.getSingleGoodsId(), o.getAbleStock());
            }
        });
        total = temp.values().stream().mapToInt(integer -> integer).sum();
        this.residualInventory = total;
        return list;
    }

}
